package com.sxj.corejava.code14_Lambda表达式;

import java.util.Arrays;
import java.util.List;

/**
 * @author 石小俊
 */
public class Test09_中间操作 {

    private static List<Integer> list = Arrays.asList(5, 1, 3, 9, 13, 16, 8, 2, 18, 9, 7, 1);
//    private static List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14);

    public static void main(String[] args) {
//        testFilter();
//        testDistinct();
//        testLimit();
//        testSkip();
//        findPage(3, 5);
//        testMap();
//        testSorted();
        testSortedComparator();
    }

    public static void testFilter() {
        // 创建对象
        list.stream()
                // 中间操作
                .filter(i -> i % 2 != 0)
                // 终止操作
                .forEach(System.out::println);
    }

    public static void testDistinct() {
        list.stream()
                .distinct()
                .forEach(System.out::println);
    }

    public static void testLimit() {
        list.stream()
                .limit(8)
                .forEach(System.out::println);
    }

    public static void testSkip() {
        list.stream()
                .skip(5)
                .forEach(System.out::println);
    }

    public static void findPage(Integer pageNo, Integer pageSize) {
        // 第二页,每页三条数据
//        list.stream()
//                .skip(3)
//                .limit(3)
//                .forEach(System.out::println);

        // 分页规律
        list.stream()
                .skip((pageNo - 1) * pageSize)
                .limit(pageSize)
                .forEach(System.out::println);
    }

    public static void testMap() {
        list.stream()
                .map(i -> i * 2)
                .forEach(System.out::println);
    }

    public static void testSorted() {
        list.stream()
                .distinct()
                .sorted()
                .forEach(System.out::println);
        List<String> list2 = Arrays.asList("3", "11", "12", "1", "101", "21", "2");
        System.out.println("****************************");
        list2.stream()
                .distinct()
                .sorted()
                .forEach(System.out::println);
    }

    public static void testSortedComparator() {
        list.stream()
                .distinct()
                .sorted((i1, i2) -> i2 - i1)
                .forEach(System.out::println);
        List<String> names = Arrays.asList("admin", "jack", "tom");
        System.out.println("***************************");
        names.stream()
                .sorted((s1, s2) -> s1.length() - s2.length())
                .forEach(System.out::println);
    }
}
